package com.quirka.logica;

import java.awt.image.BufferedImage;

public class EcualizarImagen
{

    public static void ecualizar(BufferedImage imageOld, int []H){
        
        /** Total de Byte por escala de gris */
        int totalByteByEscalaDeGris[]=H;
        int coeficiente=255;
        /** Porcentaje de cada gris en la imgen original*/
        double hOrig[]=new double[256];
        /** Desplazamiento de las frecuencias una ves ecualizada*/
        int desplazamientoEcual[]=new int[256];
        
        int pix[] = new int[1];
        int n = imageOld.getWidth();
        int m = imageOld.getHeight();
        
        /** Total de bytes en la imagen */
        int maxByteCount = 0;
        
        for (int i = 0; i < totalByteByEscalaDeGris.length; i++) {          
              maxByteCount += totalByteByEscalaDeGris[i];
        }
       
        for (int i = 0; i < totalByteByEscalaDeGris.length; i++) {
            hOrig[i]=(double)totalByteByEscalaDeGris[i]/(double)maxByteCount;            
          }
        
        double acumulador=0;
        double calculo=0;
        int index=0;
        
        for (int i = 0; i < hOrig.length; i++) {
            calculo=(double)coeficiente*hOrig[i];
            acumulador+=calculo;
            index=(int)Math.round(acumulador);
            desplazamientoEcual[i]=index;
          }
        
         for (int fila = 0; fila < n; fila++) 
         {        
           for (int col = 0; col < m; col++) 
            {          
               imageOld.getRaster().getPixel(fila, col, pix);
               pix[0]=desplazamientoEcual[pix[0]];               
               imageOld.getRaster().setPixel(fila, col, pix);
                          
            }
         }   
       
        
    }
}
